package com.niiwoo.civet.account.enums;

import com.niiwoo.tripod.provider.exception.NoSuchEnumValueException;
import lombok.Getter;

import java.util.ArrayList;
import java.util.List;

/**
 * 账单金额统计类型枚举
 * Created by xiaoyingping on 2018/12/7
 */
@Getter
public enum BillAmountStatisticsEnum {

    RECHARGE_AMOUNT,//充值金额
    WITHDRAW_AMOUNT,//提现金额

    ACCUMULATED_PROFIT,//累计收益
    CARD_AND_REDPACKET,//卡券红包（财富）
    CARD_AND_REDPACKET_INVEST,//卡券红包(投资)
    PLATFORM_PRIZE,//平台奖励
    RECOMMEND_PRIZE,//推荐奖励

    EARNED_PROFIT,//已收收益
    EARNED_PROFIT_INVEST,//已赚收益

    RECEIVED_CAPITAL,//已收本金
    ACCEPTED_INTEREST,//已收利息
    PENALTY_INTEREST,//已收罚息
    RECEIVED_PAYMENT_INTEREST,//回款利息
    PLATFORM_AND_ACTIVITY_INCREASE_INTEREST,//平台或活动加息
    CARD_INCREASE_INTEREST,//加息券加息
    INVEST_CASHBACK,//投资返现红包



    LOAN_AMOUNT,//借款金额
    REPAYMENT_CAPITAL,//还款本金
    REPAYMENT_INTEREST,//还款利息
    REPAYMENT_PENALTY,//还款罚息



    WITHDRAW_FEE,//提现手续费
    TRANSFER_FEE,//转让手续费
    INVEST_FEE,//投资费用
    LOAN_FEE,//借款费用
    GUARANTEE_FEE,//担保费用

    ;



    public static List<String> getBillSecondSubjects(BillAmountStatisticsEnum billAmountStatisticsEnum){
        List<String> list = new ArrayList<>();
        switch (billAmountStatisticsEnum){
            case RECHARGE_AMOUNT:
                //充值金额
                list.add(BillSecondSubjectEnum.USER_RECHARGE.getCode());
                break;
            case WITHDRAW_AMOUNT:
                //提现金额
                list.add(BillSecondSubjectEnum.USER_WITHDRAW.getCode());
                break;
            case ACCUMULATED_PROFIT:
                //累计收益:回款利息（含罚息）+卡券红包+平台奖励+推荐奖励
                list.addAll(BillAmountStatisticsEnum.getBillSecondSubjects(RECEIVED_PAYMENT_INTEREST));//回款利息（含罚息）
                list.addAll(BillAmountStatisticsEnum.getBillSecondSubjects(CARD_AND_REDPACKET));//卡券红包
                list.addAll(BillAmountStatisticsEnum.getBillSecondSubjects(PLATFORM_PRIZE));//平台奖励
                list.addAll(BillAmountStatisticsEnum.getBillSecondSubjects(RECOMMEND_PRIZE));//推荐奖励
                break;
            case RECEIVED_PAYMENT_INTEREST:
                //回款利息（含罚息）
                list.add(BillSecondSubjectEnum.USER_INVEST_REPAYMENT_INTEREST.getCode());//利息
                list.add(BillSecondSubjectEnum.USER_INVEST_REPAYMENT_PENALTY.getCode());//罚息
                break;
            case CARD_AND_REDPACKET:
                //卡券红包（财富）
                list.add(BillSecondSubjectEnum.USER_RED_BORROW.getCode());//借款返现红包
                list.add(BillSecondSubjectEnum.USER_RED_INVEST.getCode());//投资返现红包
                list.add(BillSecondSubjectEnum.USER_RED_GUARANTEE.getCode());//担保返现红包
                list.add(BillSecondSubjectEnum.USER_RED_COUPON_RATE_INTEREST.getCode());//加息券加息
                list.add(BillSecondSubjectEnum.USER_RED_INVEST_COUPON.getCode());//投资代金券
                list.add(BillSecondSubjectEnum.USER_RED_GUARANTEE_COUPON.getCode());//担保代金券
                list.add(BillSecondSubjectEnum.USER_RED_WITHDRAW_COUPON.getCode());//提现代金券
                break;
            case CARD_AND_REDPACKET_INVEST:
                //卡券红包(投资)
                list.add(BillSecondSubjectEnum.USER_RED_INVEST.getCode());//投资返现红包
                list.add(BillSecondSubjectEnum.USER_RED_GUARANTEE.getCode());//担保返现红包
                list.add(BillSecondSubjectEnum.USER_RED_COUPON_RATE_INTEREST.getCode());//加息券加息
                list.add(BillSecondSubjectEnum.USER_RED_INVEST_COUPON.getCode());//投资代金券
                list.add(BillSecondSubjectEnum.USER_RED_GUARANTEE_COUPON.getCode());//担保代金券
                break;
            case PLATFORM_PRIZE:
                //平台奖励
                list.add(BillSecondSubjectEnum.USER_PLATFORM_GIVEN_ACTIVITY_RAISE_INTEREST.getCode());//平台加息或活动加息
                list.add(BillSecondSubjectEnum.USER_GUARANTEE_INCOME_BONUS.getCode());//尽调奖励
                list.add(BillSecondSubjectEnum.USER_RED_TUNE.getCode());//尽调达人红包
                list.add(BillSecondSubjectEnum.USER_RED_FINANCIAL_INTEREST.getCode());//理财金利息
                list.add(BillSecondSubjectEnum.USER_RED_RECHARGE.getCode());//现金红包（以前也叫充值红包）
                list.add(BillSecondSubjectEnum.USER_RED_CASH.getCode());//活动红包（以前也叫现金红包）
                list.add(BillSecondSubjectEnum.USER_RED_FINANCIAL_INTEREST_INCOME.getCode());//理财金担保收益
                list.add(BillSecondSubjectEnum.USER_SUBSIDY_BORROW.getCode());//借款人补贴
                list.add(BillSecondSubjectEnum.USER_SUBSIDY_INVEST.getCode());//投资人补贴
                list.add(BillSecondSubjectEnum.USER_SUBSIDY_TUNE.getCode());//尽调人补贴
                list.add(BillSecondSubjectEnum.USER_SUBSIDY_GUARANTEE.getCode());//担保人补贴
                break;
            case RECOMMEND_PRIZE:
                //推荐奖励
                list.add(BillSecondSubjectEnum.USER_PLATFORM_GIVEN_REGISTER.getCode());//推荐注册奖励
                list.add(BillSecondSubjectEnum.USER_PLATFORM_GIVEN_INVEST.getCode());//推荐投资奖励（推荐投资活动平台奖励）
                list.add(BillSecondSubjectEnum.USER_PLATFORM_GIVEN_INVEST_CUMULATIVE.getCode());//推荐投资奖励（推荐累计投资奖励【运营活动】）
                list.add(BillSecondSubjectEnum.USER_PLATFORM_GIVEN_INVEST_BONUS.getCode());//推荐投资奖励（推荐投资分红金奖励【运营活动】）
                list.add(BillSecondSubjectEnum.USER_PLATFORM_GIVEN_BORROW_BONUS.getCode());//推荐借款奖励（推荐借款分红金奖励【运营活动】）
                list.add(BillSecondSubjectEnum.USER_PLATFORM_GIVEN_BORROW.getCode());///推荐借款奖励（推荐借款活动平台奖励）
                list.add(BillSecondSubjectEnum.USER_PLATFORM_GIVEN_GUARANTEE.getCode());//推荐担保奖励
                list.add(BillSecondSubjectEnum.USER_PLATFORM_GIVEN_GUARANTEE_PERSON.getCode());//推荐担保人奖励
                list.add(BillSecondSubjectEnum.USER_PLATFORM_GIVEN_BORROWED.getCode());//被推荐人借款奖励（被推荐人借款，平台奖励被推荐人）
                list.add(BillSecondSubjectEnum.USER_PLATFORM_GIVEN_BORROWED_FIRST.getCode());//被推荐人借款奖励（首次借款奖励【运营活动】）
                list.add(BillSecondSubjectEnum.USER_PLATFORM_GIVEN_INVESTED.getCode());//被推荐人投资奖励（被推荐人投资，平台奖励被推荐人）
                list.add(BillSecondSubjectEnum.USER_PLATFORM_GIVEN_INVESTED_FIRST.getCode());//被推荐人投资奖励（首次投资奖励【运营活动】）
                list.add(BillSecondSubjectEnum.USER_PLATFORM_GIVEN_GUARANTEED.getCode());//被推荐人担保奖励（推荐人担保，平台奖励被推荐人）
                list.add(BillSecondSubjectEnum.USER_PLATFORM_GIVEN_GUARANTEED_FIRST.getCode());//被推荐人担保奖励（首次担保奖励【运营活动】）
                break;
            case EARNED_PROFIT:
                //已收收益
                list.add(BillSecondSubjectEnum.USER_INVEST_REPAYMENT_INTEREST.getCode());//利息
                list.add(BillSecondSubjectEnum.USER_INVEST_REPAYMENT_PENALTY.getCode());//罚息
                list.add(BillSecondSubjectEnum.USER_PLATFORM_GIVEN_ACTIVITY_RAISE_INTEREST.getCode());//平台加息或活动加息
                list.add(BillSecondSubjectEnum.USER_RED_COUPON_RATE_INTEREST.getCode());//加息券加息
                list.add(BillSecondSubjectEnum.USER_RED_INVEST.getCode());//投资返现红包
                break;
            case EARNED_PROFIT_INVEST:
                //已赚收益
                list.add(BillSecondSubjectEnum.USER_INVEST_REPAYMENT_INTEREST.getCode());//利息
                list.add(BillSecondSubjectEnum.USER_INVEST_REPAYMENT_PENALTY.getCode());//罚息
                list.add(BillSecondSubjectEnum.USER_PLATFORM_GIVEN_ACTIVITY_RAISE_INTEREST.getCode());//平台加息或活动加息
                list.add(BillSecondSubjectEnum.USER_RED_COUPON_RATE_INTEREST.getCode());//加息券加息
                break;
            case RECEIVED_CAPITAL:
                //已收本金
                list.add(BillSecondSubjectEnum.USER_INVEST_REPAYMENT_CORPUS.getCode());//投资回款本金
                list.add(BillSecondSubjectEnum.USER_GUARANTEE_PAY_BACK_CORPUS.getCode());//垫付本金回款
                list.add(BillSecondSubjectEnum.USER_GUARANTEE_REPAYMENT.getCode());//担保保证金回款
                list.add(BillSecondSubjectEnum.USER_TRANSFER_CORPUS.getCode());//债转本金
                break;
            case ACCEPTED_INTEREST:
                //已收利息
                list.add(BillSecondSubjectEnum.USER_INVEST_REPAYMENT_INTEREST.getCode());//回款利息
                list.add(BillSecondSubjectEnum.USER_TRANSFER_INTEREST.getCode());//债转利息
                break;
            case PENALTY_INTEREST:
                //已收罚息
                list.add(BillSecondSubjectEnum.USER_INVEST_REPAYMENT_PENALTY.getCode());
                break;
            case PLATFORM_AND_ACTIVITY_INCREASE_INTEREST:
                //平台加息或活动加息
                list.add(BillSecondSubjectEnum.USER_PLATFORM_GIVEN_ACTIVITY_RAISE_INTEREST.getCode());
                break;
            case CARD_INCREASE_INTEREST:
                //加息券加息
                list.add(BillSecondSubjectEnum.USER_RED_COUPON_RATE_INTEREST.getCode());
                break;
            case INVEST_CASHBACK:
                //投资返现红包
                list.add(BillSecondSubjectEnum.USER_RED_INVEST.getCode());
                break;
            case LOAN_AMOUNT:
                //借款金额
                list.add(BillSecondSubjectEnum.USER_BORROW_INCOME_AMOUNT.getCode());
                break;
            case REPAYMENT_CAPITAL:
                //还款本金
                list.add(BillSecondSubjectEnum.USER_REPAYMENT_CORPUS.getCode());
                break;
            case REPAYMENT_INTEREST:
                //还款利息
                list.add(BillSecondSubjectEnum.USER_REPAYMENT_INTEREST.getCode());
                break;
            case REPAYMENT_PENALTY:
                //还款罚息
                list.add(BillSecondSubjectEnum.USER_REPAYMENT_PENALTY.getCode());//罚息
                list.add(BillSecondSubjectEnum.USER_REPAYMENT_CORPUS_PENALTY.getCode());//本金罚息
                break;
            case WITHDRAW_FEE:
                //提现手续费
                list.add(BillSecondSubjectEnum.USER_WITHDRAW_SERVICE_FEE.getCode());
                break;
            case TRANSFER_FEE:
                //转让手续费
                list.add(BillSecondSubjectEnum.USER_TRANSFER_CREDITOR_OUT_SERVICE_FEE.getCode());
                break;
            case INVEST_FEE:
                //投资费用
                list.add(BillSecondSubjectEnum.USER_INVEST_SERVICE_FEE.getCode());//投资服务费
                break;
            case LOAN_FEE:
                //借款费用:放款时收取
                list.add(BillSecondSubjectEnum.USER_BORROW_SERVICE_FEE.getCode());//平台服务费
                list.add(BillSecondSubjectEnum.USER_BORROW_GUARANTEE_SERVICE_FEE.getCode());//担保服务费
                list.add(BillSecondSubjectEnum.USER_BORROW_PRE_ARBITRATION_SERVICE_FEE.getCode());//预仲裁服务费
                list.add(BillSecondSubjectEnum.USER_BORROW_RECOMMENDED_SERVICE_FEE.getCode());//推荐服务费
                list.add(BillSecondSubjectEnum.USER_BORROW_TUNE.getCode());//尽调费
                list.add(BillSecondSubjectEnum.USER_BORROW_GUARANTEE_FEE.getCode());//担保费
                list.add(BillSecondSubjectEnum.USER_BORROW_SERVICE_FEE_OVERDUE_FINE.getCode());//平台服务费罚息
                list.add(BillSecondSubjectEnum.USER_BORROW_MANAGE_FEE.getCode());//平台管理费
                list.add(BillSecondSubjectEnum.USER_BORROW_CONSULTING_FEE.getCode());//咨询服务费
                list.add(BillSecondSubjectEnum.USER_BORROW_PRE_FEE.getCode());//前置服务费
                //借款费用:还款时收取
                list.add(BillSecondSubjectEnum.USER_REPAYMENT_MANAGER_FEE.getCode());//平台管理费
                list.add(BillSecondSubjectEnum.USER_REPAYMENT_GUARANTEE_FEE.getCode());//担保服务费
                list.add(BillSecondSubjectEnum.USER_REPAYMENT_COLLECT_FEE.getCode());//催收服务费
                list.add(BillSecondSubjectEnum.USER_REPAYMENT_CONSULTING_FEE.getCode());//咨询服务费
                break;
            case GUARANTEE_FEE:
                //担保费用
                list.add(BillSecondSubjectEnum.USER_GUARANTEE_OUTCOME.getCode());//担保服务费
                break;
            default:
                throw new NoSuchEnumValueException("BillAmountStatisticsEnum:" + billAmountStatisticsEnum);
        }

        return list;
    }



}
